Skip to main content

Multicore

L'assegnazione dell'attività e del core della CPU viene visualizzata nella Configurazione dell'attività oggetto su Scheda: Gruppi di attività scheda.

Sempre più controller di oggi dispongono di processori con più core CPU.

Se CODESYS viene eseguito su un controller multicore senza utilizzare la funzionalità multicore, la distribuzione delle attività viene gestita dallo scheduler del sistema operativo. Ciò è vero a condizione che un'applicazione venga eseguita con più attività. In questo caso, non hai alcuna influenza diretta sulla distribuzione delle attività. A seconda del bilanciamento del carico, le attività possono essere eseguite anche su diversi core della CPU

Con il CODESYS Funzionalità multicore, le task IEC stesse possono essere assegnate a core CPU dedicati, tenendo conto del numero di core CPU acquisiti. Ciò può comportare prestazioni migliorate. Il programma IEC dovrebbe essere suddiviso in diverse task per questo scopo.

Quando si distribuiscono i task IEC ai core della CPU, sono presenti CODESYS due strategie fondamentalmente diverse:

  • Attività IEC collegata e fissata a un core della CPU:

    L'attività viene sempre eseguita su questo specifico core della CPU. È possibile collegare più attività a un core della CPU raggruppandole. Ciò è utile, ad esempio, se il programma IEC non è ancora in grado di funzionare contemporaneamente su più core della CPU

  • L'attività IEC viene eseguita su tutti i core della CPU:

    Il sistema operativo assume il controllo della distribuzione di una o più attività di un gruppo sui core della CPU.

Importante

Quando i compiti IEC sono distribuiti sui core della CPU, nel comportamento del programma IEC si verificano alcune modifiche che devono essere prese in considerazione.

  • L'elaborazione dei compiti IEC in base alla priorità non è più assegnata! I task vengono elaborati in base alla loro priorità solo se sono legati insieme a un core della CPU.

  • La coerenza del ciclo dei dati nell'attività IEC con la massima priorità non è più scontata. Pertanto, i dati devono essere copiati localmente all'inizio del ciclo di attività IEC se i valori non devono cambiare durante il

  • Per tutte le attività, esiste un'immagine di processo condivisa da cui operano le attività. ReadInputs() la funzione viene chiamata all'inizio di ogni attività e WriteOutputs() la funzione viene chiamata alla fine. Di conseguenza, il modello IPO si applica a ciascuna attività individualmente. Queste funzioni leggono e scrivono sull'immagine del processo condivisa. L'immagine del processo viene inoltre scritta fisicamente e i pacchetti vengono trasmessi solo quando viene richiamato il bus cycle task. Tuttavia, l'attività del ciclo del bus attende ogni chiamata di WriteOutputs e ReadInputs delle attività. Ciò garantisce la coerenza dei dati all'interno dell'attività del ciclo del bus.

    • Gli output possono essere assegnati solo a un'attività.

    • Gli input possono essere assegnati a più attività, ma l'accesso diretto dovrebbe essere evitato. Gli input devono essere scritti nelle variabili locali del task mediante operazioni atomiche.

    • Un secondo compito, con cui aggiorna l'immagine del processo ReadInputs() parallelamente alla prima attività, aggiorna anche gli input della prima attività mentre è in esecuzione.

    • Di conseguenza, la coerenza dei dati di un'attività è garantita solo sui single core per l'attività con la priorità più alta.

    Suggerimento

    È possibile impostare l'attività del ciclo del bus sul Impostazioni PLC scheda.

    È possibile visualizzare l'accesso I/O sul Scheda: Distribuzione attività scheda.

    Per ulteriori informazioni, vedere: Compito del ciclo del bus

  • Per contatori coerenti (incrementatori, decrementi) dovresti sempre usare la funzione di libreria esterna atomica SysCpuAtomicAdd() essere utilizzato (per i dettagli vedere: SysCpuHandling.library)

Importante

consistenza dei dati

  • Accessi a bit (tipo di dati BIT) non vengono elaborati in modo coerente (atomicamente) nel programma IEC su CPU multi-core. Per questo consigliamo di utilizzare la funzione di libreria esterna SysCpuTestAndSetBit(). (Per i dettagli vedere SysCpuHandling.library)

  • Tipi di dati semplici fino a una larghezza di 32 bit (BOOL, BYTE, WORD/INT, DWORD/DINT, ecc.) vengono elaborati in modo coerente (atomico) anche nel programma IEC su CPU multicore.

  • Tipi di dati a 64 bit (LINT, LWORD, e LREAL) vengono elaborati in modo coerente (atomico) nel programma IEC solo su sistemi a 64 bit e sistemi multicore. Per fare ciò, non è necessario prendere

  • Per accedere a tipi di dati complessi (STRING, FB, STRUCTe ARRAY), è necessario organizzare personalmente la sincronizzazione/coerenza.

  • È possibile nella configurazione dell'attività nella scheda utilizzo variabile determinare se una variabile in un'attività IEC ha accesso in scrittura o in lettura.

  • Nei sistemi multicore, può verificarsi un «effetto di riordino della memoria». Per ulteriori informazioni, vedere: IEC Operator: __MemoryBarrier().

Distribuisci le attività su più core del processore

Requisito: nell'applicazione sono definite almeno due attività, ad esempio MainTask (IEC-Task) e LowTask (Compito IEC).

  1. Apri l'oggetto configurazione dell'attività nel blocco note.

  2. Passa al Gruppi di attività scheda.

    La panoramica mostra l'impostazione predefinita Compiti IEC gruppo di attività.

  3. Aggiungi con il pulsante Aggiungere gruppo aggiungere un nuovo gruppo di attività.

    Le NewGroup viene aggiunto il gruppo.

  4. Fai doppio clic sul nome del gruppo NewGroup e cambialo in LowGroup.

  5. Scegli sotto Nucleo un incarico, per esempio 1.

  6. Aprire l'attività LowTask (IEC-Task) nell'editor.

  7. Nel Gruppo di attività, seleziona il nuovo gruppo LowGroup.

    Le LowTask l'attività viene ora elaborata dal processore core 1 a causa della sua appartenenza al gruppo in LowGroup.

Visualizza l'utilizzo del processore per core del processore nella traccia

puoi entrare CODESYS l'utilizzo del processore in un oggetto DeviceTrace visualizzare.

Per ulteriori informazioni su come vengono visualizzate le tracce del dispositivo nel progetto, vedere: Accesso a tutte le tracce del controller